package com.xiaozeng.user.controller;

import com.xiaozeng.param.UserCheckParam;
import com.xiaozeng.param.UserLoginParam;
import com.xiaozeng.pojo.User;
import com.xiaozeng.user.service.UserService;
import com.xiaozeng.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


/**
 * @Author: xiaozeng
 * @Date: 2022 11
 * @Description: 用户登录，注册和账号检查功能
 **/

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;
    /**
     * 检查账号是否可用的接口
     * @param userCheckParam 接收检查的账号实体 内部有参数校验注解
     * @param bindingResult 获取校验结果的实体对象，配合Validated使用
     * @return 返回封装结果Result对象即可
     */
    @PostMapping("check")
    public Result check(@RequestBody @Validated UserCheckParam userCheckParam, BindingResult bindingResult){
        //检查是否符合检验注解的规则  符合 false  不符合 true
        if (bindingResult.hasErrors()){
            return Result.fail("账号为null,不可使用!");
        }
        return userService.check(userCheckParam);
    }

    /**
     * 检查账号是否可用的接口
     * @param user 注册需要所有user的信息
     */
    @PostMapping("register")
    public Result register(@RequestBody @Validated User user, BindingResult bindingResult){
        //检查是否符合检验注解的规则  符合 false  不符合 true
        if (bindingResult.hasErrors()){
            return Result.fail("参数异常");
        }
        return userService.register(user);
    }

    /**
     * 登录接口
     * @param userLoginParam 登录所需的参数
     */
    @PostMapping("login")
    public Result login(@RequestBody @Validated UserLoginParam userLoginParam, BindingResult bindingResult){
        //检查是否符合检验注解的规则  符合 false  不符合 true
        if (bindingResult.hasErrors()){
            return Result.fail("登录参数异常");
        }
        return userService.login(userLoginParam);
    }

    /**
     * 未登录跳转接口
     */
    @PostMapping("Unauthorized")
    public Result Unauthorized(){

        return Result.NO_LOGIN();
    }



}
